package com.ruoyi.mapper.quality;

import com.ruoyi.domain.quality.MesQualityInspection;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 质量检验记录Mapper接口
 * 
 * @author ruoyi
 */
@Mapper
public interface MesQualityInspectionMapper
{
    /**
     * 查询质量检验记录
     * 
     * @param inspectionId 质量检验记录主键
     * @return 质量检验记录
     */
    public MesQualityInspection selectMesQualityInspectionByInspectionId(Long inspectionId);

    /**
     * 查询质量检验记录列表
     * 
     * @param mesQualityInspection 质量检验记录
     * @return 质量检验记录集合
     */
    public List<MesQualityInspection> selectMesQualityInspectionList(MesQualityInspection mesQualityInspection);

    /**
     * 新增质量检验记录
     * 
     * @param mesQualityInspection 质量检验记录
     * @return 结果
     */
    public int insertMesQualityInspection(MesQualityInspection mesQualityInspection);

    /**
     * 修改质量检验记录
     * 
     * @param mesQualityInspection 质量检验记录
     * @return 结果
     */
    public int updateMesQualityInspection(MesQualityInspection mesQualityInspection);

    /**
     * 删除质量检验记录
     * 
     * @param inspectionId 质量检验记录主键
     * @return 结果
     */
    public int deleteMesQualityInspectionByInspectionId(Long inspectionId);

    /**
     * 批量删除质量检验记录
     * 
     * @param inspectionIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteMesQualityInspectionByInspectionIds(Long[] inspectionIds);

    /**
     * 校验质量检验标准编码是否唯一
     * @param inspectionCode 质量检验标准编码
     * @param inspectionId 质量检验标准ID
     * @return 结果
     */
    public MesQualityInspection checkInspectionCodeUnique(@Param("inspectionCode") String inspectionCode, @Param("inspectionId") Long inspectionId);

    /**
     * 根据工单ID查询检验记录列表
     * 
     * @param workOrderId 工单ID
     * @return 质量检验记录集合
     */
    List<MesQualityInspection> selectInspectionsByWorkOrderId(@Param("workOrderId") Long workOrderId);

    /**
     * 根据工单编号查询检验记录列表
     * 
     * @param workOrderCode 工单编号
     * @return 质量检验记录集合
     */
    List<MesQualityInspection> selectInspectionsByWorkOrderCode(@Param("workOrderCode") String workOrderCode);

    /**
     * 根据检验类型查询检验记录列表
     * 
     * @param type 检验类型
     * @return 质量检验记录集合
     */
    List<MesQualityInspection> selectInspectionsByType(@Param("type") String type);

    /**
     * 根据检验员查询检验记录列表
     * 
     * @param inspector 检验员
     * @return 质量检验记录集合
     */
    List<MesQualityInspection> selectInspectionsByInspector(@Param("inspector") String inspector);

    /**
     * 根据状态查询检验记录列表
     * 
     * @param status 状态
     * @return 质量检验记录集合
     */
    List<MesQualityInspection> selectInspectionsByStatus(@Param("status") String status);

    /**
     * 根据入库单ID查询质检记录
     * 
     * @param receiptId 入库单ID
     * @return 质检记录
     */
    public MesQualityInspection selectInspectionByReceiptId(@Param("receiptId") Long receiptId);

    /**
     * 根据工单和工序查询质检记录列表
     * 
     * @param workOrderId 工单ID
     * @param processId 工序ID
     * @return 质检记录集合
     */
    public List<MesQualityInspection> selectInspectionsByWorkOrderAndProcess(@Param("workOrderId") Long workOrderId, @Param("processId") Long processId);

    /**
     * 根据工单ID查询成品质检记录
     * 
     * @param workOrderId 工单ID
     * @return 质检记录
     */
    public MesQualityInspection selectFQCInspectionByWorkOrderId(@Param("workOrderId") Long workOrderId);

    /**
     * 统计当天指定类型的质检记录数量
     * 
     * @param inspectionType 检验类型
     * @return 数量
     */
    public int countTodayInspectionsByType(@Param("inspectionType") String inspectionType);

    /**
     * 统计指定类型和日期范围的质检记录数量
     * 
     * @param inspectionType 检验类型
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 数量
     */
    public int countInspectionsByTypeAndDate(@Param("inspectionType") String inspectionType, @Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 统计指定类型和日期范围的合格质检记录数量
     * 
     * @param inspectionType 检验类型
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 数量
     */
    public int countPassInspectionsByTypeAndDate(@Param("inspectionType") String inspectionType, @Param("startDate") Date startDate, @Param("endDate") Date endDate);
}
